Wenn sie beim Asterik Bereitschaftszeichen SPACE dr}cken, wird das Disassemblier-Feld gel|scht und der Cursor wird im Feld platziert. Jetzt k|nnen sie eine neue 6502 Anweisung eingeben. In der Befehlszeile l|scht DEL die Zeichen links vom Cursor und -- l|scht die Eingabezeile.
Benutzen sie eine der folgenden Tastatureingaben um eine Zeile einzuf}gen und den deposit-Modus zu verlassen,
aktuelle Zeile eingeben und die aktuelle Anweisung nochmals |ffnen. (N}tzlich um komplexe Ausdr}cke zu }berpr}fen oder um Symbole
und dann eine Anweisung einzugeben.)
aktuelle Zeile eingeben und n{chste Anweisung |ffnen.
@SHIFT + l l
aktuelle Zeile eingeben und vorangehende Anweisung |ffnen.
@RETURN
aktuelle Zeile eingeben und zum Bereitschaftszeichen zur}ckkehren.
Wird in der Eingabezeile ein Fehler festgestellt, so wird die Zeile nicht }bernommen und der Cursor blinkt als
@a ?.
Um den 'deposit-mode' zu verlassen, haben sie eine der folgenden M|glichkeiten:
1. Geben sie eine leere oder eine Zeile die nur Spaces enh{lt ein.
2. Verlassen sie mit DEL, das 'disassembly/deposit' Feld.
@a-Modus Deposit Syntax
Die a-Modus 'deposit' Eingabe mu~ eine g}ltige 6502 Opcode/Operanden Konstruktion sein, wie im geoAssembler. Da der Mini-Debugger nur hexadezimale Ausdr}cke oder Zahlensysteme verarbeitet, m}ssen alle Zahlen im Operanden diese Einshr{nkung beachten. Ebenfalls k|nnen keine Zeichen unterhalb der linken Ecke des Bildschirms eingegeben werden. Versuchen sie dies, erscheint der Cursor als blinkenedes
Beispiele f}r 'deposit' Eingaben:
@lda #$FE
Opcode und hexadezimaler absoluter Wert.
@sei
nur Opcode.
@jsr 33EF
Opcode und hexadezimaler konstante Adresse.
Befehl:
Mini: siehe
Kapitel 9.
Zweck: Speicher in Form von Daten zeigen.
Anwendung:
Paddrexp
Hinweis:
Paddrexp
ist die Adresse ab der angezeigt werden soll. Werden keine Parameter festgelegt wird ab der
Adresse angezeigt auf die der Standortz{hler momentan zeigt.
ist der allgemeine Befehl um Daten anzusehen und zu modifizieren. Wenn sie eine Speicherstelle mit
|ffnen, werden sie in einen wechselwirkenden Modus versetzt, in dem alle Tastatureingaben auf spezielle Art und Weise interpretiert werden. Im
Modus k|nnen sie die Datenanzeige vorw{rts und r}ckw{rts scrollen und jederzeit modifizieren.
Die Ausgabe mit dem
Befehl im folgenden allgemeinen Format:
address label plus offset flag mode
046B 53 .byte $53
046C 61 .byte $61
046D 6D .byte $6D
046E AboutTex+$03 .byte $70
046F AboutTex+$04 .byte $6C
0470 AboutTex+$05 * .byte $65
Phex address
ist die absolute Adresse der Daten.
Plabel plus offset
ist entweder ein Label mit einem positiven Ein-Byte Offset (
FF) oder die absolute Adresse, wenn kein r}ckw{rtsweisendes Label im Bereich bis
FF vorhanden ist. Wenn sie Labels mit dem
Befehl (option 2) des- aktivieren oder sie wechseln die Anzeige mit der C-open-mode Taste, enth{lt dieses Feld dann die hexadezimalen Bytes die die Anweisung beinhaltet, wie im folgenden Beispiel:
0470 65 .byte $65
046D 6D 70 .word $706D
Diese M|glichkeit ist besonders dann n}tzlich, wenn sie die Daten in verschiedenen Zahlensystemen anzeigen lassen wollen - sie haben immer noch die M|glichkeit auf die hexadezimale Anzeige umzuschalten.
Pflag
ist ein Feld mit 3 Positionen, jedes hat sein eigenes Symbol:
b Breakpoint setzen, bei dieser Anweisung
> der Programmz{hler zeigt auf diese Anweisung
* aktuelle ge|ffnete Anweisung
Pmode
ist der Datenanzeige Modus, entweder .
@byte
oder .
@word
. Daten im Wordformat werden in Lo/Hi angezeigt, wie im folgenden Beispiel:
046D AboutTex+$02 .word $706D
Pdata
sind die Daten der aktuellen Adresse. Die Daten werden nicht in Symbolersatz umgewandelt bis diese Funktion mit der
@s Taste
aufgerufen wird (siehe unten).
@Open m-Modus Tastatureingaben
Wenn Daten mit dem
Befehl ge|ffnet werden, werden die Tastatureingaben vom Super-Debugger in dieser Ebene ausgewertet und bearbeitet. Im Fall einer falschen Tastatureingabe erscheint der Cursor als blinkendes
Symbol. Wenn der Cursor auf dem Asterik im
Pflag
-Feld steht, sind folgende Tastatureingaben erlaubt:
@space
'deposit mode' eingeben, an dieser Stelle ('deposit mode' siehe 8-31)
@ll oder J
aktuelle Anweisung schlie~en und n{chste Anweisung |ffnen.
@SHIFT + ll oder K
aktuelle Anweisung schlie~en und vorangehende Anweisung |ffnen
. aktuelle Anweisung nochmals |ffnen
@RETURN
aktuelle Anweisung schlie~en und zum Bereitschaftszeichen zur}ckkehren.
zeigt Data als Byte
zeigt Data als Word
schaltet vom
-Modus in den
-Modus. Siehe
Befehl.
Data dezimal anzeigen
Data hexadezimal anzeigen
Data okatal anzeigen
Data bin{r anzeigen. Hinweis: Wordwerte werden hexadezimal angezeigt, da Lo/Hi bin{re Words
selten n}tzlich sind.
Data als Zeichen anzeigen
Data in Symbolform anzeigen
Labelstatus wechselen zwischen aktiv und nichtaktiv (siehe option 2 bei
setze einen Breakpoint an dieser Adresse. (nicht besonders n}tzlich wenn man Data einsieht)
Programmz{hler auf diese Adresse setzen. (nicht besonders n}tzlich wenn man Data einsieht)
@L ll
|ffne an der Adresse des n{chsten Label
@L SHIFT + ll
|ffne an der Adresse des vorangehenden Label
momentan angezeigtes Label l|schen, auch wenn es als Offset angezeigt wird. Wenn daselbe Label
in mehreren Modulen existiert, wird das Label nur in dem Modul mit der h|chsten Priorit{t
gel|scht.
@Deposit m-Modus
(deposit = ablagern, deponieren)
Wenn sie beim Asterik Bereitschaftszeichen SPACE dr}cken, wird das DisassemblierFeld gel|scht und der Cursor wird im Feld plaziert. Jetzt k|nnen sie neue Daten eingeben. In der Befehlszeile l|scht DEL die Zeichen links vom Cursor und -- l|scht die Eingabezeile.
Benutzen sie eine der folgenden Tastatureingaben um eine Zeile einzuf}gen und den deposit-Modus zu verlassen,
== aktuelle Zeile eingeben und die aktuelle Anweisung nochmals |ffnen. (N}tzlich um komplexe
Ausdr}cke zu }berpr}fen oder um Symbole und dann eine Anweisung einzugeben.)
aktuelle Zeile eingeben und n{chste Anweisung |ffnen.
@SHIFT + l l
aktuelle Zeile eingeben und vorangehende Anweisung |ffnen.
@RETURN
aktuelle Zeile eingeben und zum Bereitschaftszeichen zur}ckkehren. Wird in der Eingabezeile ein
Fehler festgestellt, so wird die Zeile nicht }bernommen und der Cursor blinkt als
Um den 'deposit-mode' zu verlassen, haben sie eine der folgenden M|glichkeiten:
Geben sie eine leere Zeile ein oder eine Zeile die nur Spaces enh{lt.
2. Benutzen sie DEL, um das 'disassembly/deposit' Feld zu verlassen.
@m-Modus Deposit Syntax
Im m-Modus werden .byte und .word etwas anders abgelegt:
.byte
Pstring
Sie k|nnen nicht mehr als 40 zusammenh{ngende Bytes (40 Zeichen oder 40 Werte) auf einmal eingeben. Ausdr}cke m}ssen zu einem Ein-Byte-Wert ausgewertet werden (
FF). Im Zweifelsfall benutzen sie den l 'grab-byte operator' (grab = schnappen).
.word exp (,exp)
Sie nicht mehr als 40 Words auf einmal ablegen.
Die komplette Eingabeablage kann bis zu 100 Zeichen lang sein. Wenn sie mehr als 100 Zeichen eingeben, erscheint der Cursor als blinkendes
Beispiele f}r die Eingabeablage:
.byte
@"This is a string"
.byte
@$00,$ff,[prog_star-.37,'c','T'
.byte
@$6543, AboutTex*2/4
Befehl:
Synonym
@: rg
Mini: siehe
in Kapitel 9.
Zweck: Register |ffnen.
Anwendung:
@reg
Pregname
Hinweis:
Pregname
ist der optionale Registername zum \ffen (beachten sie, da~ dem Registernamen
vorangestellt werden kann):
@a / x / y / sp / pc / st / mm
Wurde kein Register ausgew{hlt, wird das zuletzt ge|ffnete nochmals ge|ffnet.
kann man alle 6502 Register anzeigen und modifizieren, ebenso das Datenregister (
@$0001
). \ffnen sie Register mit
@reg, so
werden sie in einen wechselwirkenden Modus versetzt, in dem alle Tastatureingaben auf spezielle Art behandelt werden. Im
@reg-
Modus k|nnen sie in einem Durchgang alle Register ansehen und ggf. {ndern.
Die Ausgabe mit dem
@reg-
Befehl erfolgt im folgenden Format:
register name aster size data
Reg A .byte $00
Reg X .byte $FE
Reg Y .byte $C4
Reg SP .word $01FD
Reg PC .word ProgStar
Reg ST .byte $02
Reg MM * .byte $30
Pregister name
ist der Name des Registers.
A Akkumulator
X X-Index-Register
Y Y-Index-Register
SP Stapelzeiger
Programmz{hler
ST Statusregister
MM Datenregister
aster
ist ein Feld, das ein Asterik am aktiven offenen Register enth{lt.
ist die Gr|~e eines Datenregisters, entweder Byte oder Word.
ist das aktuelle Datum im Register. Das Datum im PC-Register wird automatisch in Symbolersatz gewandelt, nicht aber in den anderen Registern, es sei denn sie rufen diese M|glichkeit ausdr}cklich mit der
Taste auf (siehe unten).
@Open reg-Modus Tastatureingaben
Wenn Daten mit dem
@reg
Befehl aufgerufen werden, interpretiert der Super-Debugger die Tastatureingaben und wertet sie in dieser Ebene aus. Wird eine falsche oder nicht erlaubte Tastatureingabe festgestellt, so erscheint der Cursor als
@a ?
Symbol. Wenn der Cursor auf dem Asterik des
aster
Feldes steht, sind folgende Tastatureingaben erlaubt:
@SPACE
'deposit mode' eingeben, an dieser Stelle ('siehe deposit Beschreibung unten)
@l I oder J
aktuelle Anweisung schlie~en und n{chste Anweisung |ffnen.
@SHIFT + l l oder K
aktuelle Anweisung schlie~en und vorangehende Anweisung |ffnen
aktuelle Anweisung nochmals |ffnen (n}tzlich beim Lesen einer Hardwarespeicherstelle mit
wechselnden Werten)
@RETURN
aktuelle Anweisung schlie~en und zum Bereitschaftszeichen zur}ckkehren
dezimale Datenanzeige
hexadezimale Datenanzeige
oktale Datenanzeige
bin{re Datenanzeige. Hinweis: Wordwerte werden hexadezimal angezeigt, da bin{re
lo/hi-Words selten n}tzlich sind.
Zeichen Datenanzeige
Symbolform Datenanzeige
@Deposit reg-Modus
(deposit = }bergeben)
Wenn sie auf dem Asterik Bereitschaftszeichen SPACE dr}cken, wird das Datenfeld gel|scht und der Cursor wird in dieses Feld gesetzt. Jetzt k|nnen sie Daten in dieses Register eingeben. In der Befehlszeile l|scht DEL die Zeichen links vom Cursor und - l|scht die ganze Eingabezeile.
Um eine Zeile einzugeben und den deposit Modus zu verlassen verwenden sie folgenden Tastatureingaben:
aktuelle Zeile eingeben und aktuelle Anweisung wieder |ffnen.
(N}tzlich um komplexe Operandenausdr}cke zu }berpr}fen.)
@l l
aktuelle Zeile eingeben und n{chstes Register |ffnen
@SHIFT + l l
aktuelle Zeile eingeben und vorangehendes Register |ffnen
@RETURN
aktuelle Zeile eingeben und zum Bereitschaftszeichen zur}ckkehren
Wird in der Eingabezeile ein Fehler festgestellt, so wird die Zeile nicht }bernommen und der Cursor erscheint als blinkendes
@a ?.
Um den 'deposit-mode' zu verlassen, haben sie eine der folgenden M|glichkeiten:
1. Geben sie eine leere Zeile ein oder eine Zeile die nur Spaces enh{lt:
2. Benutzen sie DEL, um das 'disassembly/deposit' Feld zu verlassen.
@reg-Modus Deposit Syntax
(deposit = }bergeben)
-Modus ]bergaben haben folgende Syntax:
Wenn das Register Ein-Byte gro~ ist, wird nur das Lo-Byte des Ausdrucks im Register abgelegt.
Die komplette ]bergeben Eingabe kann bis zu 100 Zeichen lange sein. Wenn sie mehr als 100 einzugeben versuchen, erscheint der Cursor als blinkendes
Befehl:
@flag
Abkzg:
Mini: siehe
in Kapitel 9
Zweck: einzelne Flags im Prozessorstatusregister (ST) |ffnen
Anwendung:
@flag
((f.)
Pflagname
Hinweis:
Pflagname
ist der optionale Name des Flags das ge|ffnet werden soll (Hinweis:
kann vor den
Flagnamen gesetzt werden:
kein Flag ausgew{hlt, so wird das zuletzt ge|ffnete nochmals ge|ffnet.
@flag
kann man alle Bits des Prozessor-Status-Registers (ST, r.st) anzeigen und modifizieren. \ffnen sie ein Flag mit
@flag,
werden sie in einen wechselwirkendenden Modus versetzt, in dem alle Tastatureingaben auf eine spezielle Art und Weise behandelt werden. Im
@flag-
Modus k|nnen sie jedes Flag (Bit im ST.Register, eingeschlossen das undefinierte Bit 5) im Wechsel einsehen, setzen oder l|schen, welches sie wollen. Die Ausgabe mit dem
@flag
Befehl erfolgt im allgemeinen im folgenden Format:
Flag Symbol FlagName aster Data
Flag N Sign (neg.) % 1
Flag V Overflow % 0
Flag undefiniert % 0
Flag B BRK Flag % 0
Flag D Dezimalmodus % 0
Flag I IRQ inaktiv % 0
Flag Z Zero-Flag % 1
Flag C Carry Flag
Flag Symbol
ist die allgemeine Abk}rzung f}r das Flag. Das undefinierte Bit (Bit 5) hat kein Symbol.
FlagName
ist eine Kurzbeschreibung des Flags.
aster
ist ein Feld da~ das aktuell ge|ffneten Flag durch einen Asterik anzeigt.
zeigt den aktuellen Stand des Bits: gesetzt (1) oder gel|scht (0).
@Open flag-Modus Tastaturbelegung
Wenn ein Datum mit dem
@flag
Befehl ge|ffnet wird, interpretiert der Super-Debugger die Tastatureingaben und wertet sie in dieser Ebene aus. Wird eine falsche oder nicht erlaubte Tastatureingabe festgestellt, so erscheint der Cursor als blinkenes
Symbol.
@SPACE
fixiert den Status des Flags
Flag l|schen, 0 setzen
Flag setzen, 1 setzen
@ l l oder J
aktives Flag schlie~en und das n{chste |ffnen
@SHIFT+ l l
oder K
aktives Flag schlie~en und vorangehendes |ffnen
@RETURN
aktives Flag schlie~en und zum Bereitschaftszeichen zur}ckkehren
HAbarbeitungs-Befehle
Befehl:
Mini: siehe
im Kapitel 9
Zweck: Programm in normaler Geschwindigkeit abarbeiten
Anwendung:
@go (
Paddrexp
Hinweis:
Paddrexp
ist die Adresse an der mit der Abarbeitung begonnen wird; wird keine Adresse angegeben,
beginnt
Abarbeitung mit der Stelle auf die der Programmz{hler (PC, r.pc) weist.
Befehl startet das Programm in normaler Geschwindigkeit. Der GEOS Bildschirm erscheint und ein
@jmp
zur richtigen Adresse wird simuliert. Die Kontrolle wird dem Super-Debugger erst wieder }bergeben wenn ein Breakpoint oder eine
@brk
Anweisung auftritt oder die RESTORE-Taste gedr}ckt wird.
Beispiel:
@go ProgStart
beginnt die Abarbeitung bei
@ProgStart
beginnt die Abarbeitung beim Programmz{hler
Befehl:
@runto
Abkzg:
Mini: siehe
im Kapitel 9
Zweck: abarbeiten bis eine bestimmte Adresse erreicht ist
Anwendung:
@runto (
Paddrexp
Hinweis:
Paddrexp
ist die Adresse an der die Abarbeitung stoppt. Wenn
Paddrexp
weggelassen wird, wird der
aktuelle Wert des Standortz{hlers (
@u.lc)
benutzt.
@runto
Befehl automatisiert die allgemeine Debugging Prozedur des Breakpoint Setzens, indem am aktuellen Programm-Standort-Zeiger gestartet wird (
) und mit der R}ckgabe an den Debugger der Breakpoint gel|scht wird. Wurde keine StoppAdresse gew{hlt, wird der aktuelle Wert des Standortz{hlers (
@u.lc
benutzt. Dadurch k|nnen sie zur zuletzt disassemblierten Speicherstelle zur}ckkehren.
Beispiel:
@runto PrgStart+$1e
setzt einen Breakpoint bei
@PrgStart+$1e
und startet das Programm mit
an der
Speicherstelle auf die der aktuelle Programmz{hler zeigt.
Befehl:
Abkzg:
Mini: siehe
im Kapitel 9
Zweck: arbeitet eine Unterroutine ab
Anwendung:
@jsr (
Paddrexp
Hinweis:
Paddrexp
ist die Adresse der Unterroutine die bearbeitet werden soll.
Mit dem
Befehl k|nnen sie eine Unterroutine abarbeiten. Der Super-Debugger simuliert einen top-step (siehe
Befehl), durch eine aktuelle
@jsr
Anweisung. Die Routine bei
Paddrexp
mu~ mit
enden.
Beispiel:
@jsr SetScreen
l|st ein
@jsr
zur Unterroutine
@SetScreen
aus. Die Kontrolle wird wieder an den Super-Debugger
}bergeben, wenn rts aufgerufen wird
Befehl:
Mini: siehe
im Kapitel 9
Zweck: im Einzelschrittmodus durch Anweisungen und Unterroutinen
Anwendung:
Pbreakcond
Hinweis:
Pbreakcond
ist eine optionale Breakpoint-Bedingung
Befehl versetzt den Prozessor in den Einzelschrittmodus, in dem immer eine Anweisung abgearbeitet wird. Der
Befehl, ohne Paramter, arbeitet die aktuelle Anweisung auf die der Programmz{hler (
@PC, r.p)
zeigt, ab und kehrt zum Super-Debugger zur}ck, gibt die Anweisung am neuen Standort des Programmz{hlers aus. Alle Prozessorregister, Speicherplatz-Standorte usw. zeigen nun die Wirkung der gerade abgearbeiteten Anweisung. Wird im Einzelschrittmodus eine Anweisung nach der anderen agearbeitet (dr}cken sie
um den Befehl zu wiederholen), so k|nnen sie die Auswirkungen jeder Anweisung }berpr}fen.
Befehl arbeitet indem die abzuarbeitende Anweisung }berpr}ft wird und feststellt wo die n{chste Anweisung steht; er setzt dann einen tempor{ren Breakpoint an dieser Stelle. In den meisten F{llen ist dies ein einfacher Vorrang, da die n{chste abzuarbeitende Anweisung, die n{chste im Speicher ist. F}r Anweisungen jedoch, die die Kontrolle }bergeben in dem sie den Programmz{hler wieder laden (z.B.
@jmp, jsr, rts,
Branches, usw.) mu~ die Adresse der n{chsten Anweisung entsprechend berechnet werden.
@Wichtig
: Sie k|nnen den Einzelschrittmodus nicht im ROM anwenden. Wenn sie es trotzdem probieren, erhalten sie eine Fehlermeldung, da im ROM keine Breakpoints gesetzt werden k|nnen.
@Einzelschrittmodus mit Bedingung
Befehl kann ein
Pbreakcond
Parameter angef}gt werden. Da der
Befehl bei jeder Anweisung einen tempor{ren Breakpoint setzt, wird die Bedingung gepr}ft und der Z{hler nach jeder Anweisung heruntergez{hlt. Wenn sie einen
Pbreakcond
setzen, erscheint folgende Meldung wenn der Super-Debugger arbeitet:
Stepping until condition met ...
Jedesmal wenn sie sich im Einzelschrittmodus durch einen
@jsr
Aufruf arbeiten, wird die Adresse die Routine der 'step-through-jsr history' Liste hinzuaddiert.
Die Liste gibt ihnen die M|glichkeit, die gerade im Einzelschritt aufgerufene Prozedur zu revidieren, wie auch den
@finish
Befehl aufzurufen. Siehe auch:
@t, history
@ finish.
Wenn sie mit
Pbreakcond
arbeiten und sie treffen auf einen vorher gesetzten Breakpoint, erscheint folgende Meldung:
Software breakpoint encountered ...
continue (y/n) ?
Dr}cken sie
dann wird der Breakpoint ignoriert, dr}cken sie eine andere Taste um den Breakpoint zu aktivieren, sie arbeiten sich dann nicht durch die Anweisung.
Befehl zeigt den GEOS Bildschirm nur an wenn sie option 5 aktiviert haben.
Beispiele:
@s.10
in Einzelschritten durch die n{chsten 10 Anweisungen
@s =~f.c
in Einzelschritten bis das Carry Flag gel|scht ist
@s.20,=(r.a == $50 ^^ @buf_flag)
in Einzelschritten bis der Wert im Akku gleich $50 ist oder das Byte in der Variablen
@buf_flag
20 mal
nicht Null (wahr) ist.
Befehl:
Mini: siehe
im Kapitel 9
Zweck: im Einzelschrittmodus durch die Anweisungen und 'top-step' durch Unterroutinen
Anwendung:
Pbreakcond
Hinweis:
Pbreakcond
ist eine optionale Breakpointbedingung.
Befehl versetzt den Prozessor in den Einzelschrittmodus, arbeitet eine Anweisung nach der anderen ab, bis er auf eine
@jsr
Anweisung trifft, die er dann in normaler Geschwindigkeit abarbeitet. Der
Befehl ohne Parameter arbeitet die aktuelle Anweisung oder Unterroutine ab auf die der Programmz{hler (PC,r.pc) weist und kehrt zum SuperDebugger zur}ck nachdem die Anweisung ausgegeben wurde auf die der Programmz{hler als n{chste weist. Alle Prozessorregister, Speicherstand usw. zeigen nun das Ergebnis der Anweisung oder Unterroutine an, wie gerade abgearbeitet. 'top-step' ist n}tzlich wenn man GEOS Routinen oder schon debuggte Unterroutinen nicht im Einzelschrittmodus abarbeiten lassen will. Er ist auch n}tzlich wenn man ROM-Routinen aufruft, die nicht im Einzelschrittmodus abgearbeitet werden k|nnen.
Befehl arbeitet, indem er die abzuarbeitende Anweisung }berpr}ft und feststellt wo die n{chste Anweisung steht; beinhaltet die Anweisung etwas anderes als
@jsr,
setzt er einen tempr{ren Breakpoint bei der Speicherstelle wie beim
Befehl. Ist die Anweisung jedoch
@jsr
wird ein Breakpoint bei der Anweisung gesetzt, die der aufgerufenen Unterroutine folgt.
@Wichtig:
Sie k|nnen den
Befehl nicht im ROM verwenden; sie k|nnen jedoch 'top-step' durch jsr im ROM. Versuchen sie den
Befehl zu benutzen, wenn sie im ROM sind, erhalten sie einen Fehler, da im ROM keine Breakpoints gesetzt werden k|nnen. Sie sollten auch nicht durch GEOS 'inline' Unterroutinen/GEOS Routinen die mit
beginnen) 'top-step'. Der 'top-step' setzt das erste Byte der 'inline' Daten auf
00 und der Breakpoint wird nicht aufgerufen. Am besten man bearbeitet diese F{lle manuell. Benutzen sie
@runto
um einen Breakpoint an der Anweisung zu setzen die den 'inline' Daten folgt und entfernen sie
@jsr.
@'Top-stepping' mit Bedingung
Befehl kann auch mit einem
Pbreakcond
Paramter versehen werden. Da der
Befehl bei jeder Anweisung einen tempor{ren Breakpoint setzt, wird die Bedingung }berpr}ft und der Z{hler nach jeder Anweisung herabgez{hlt. Eine Unteroutine, wird in diesem Fall, wie eine Anweisung behandelt. Wenn sie einen
Pbreakcond
setzen wird die folgende Meldung ausgegeben:
Stepping until condition met...
@Treffen auf user-definierte Breakpoints
Wird, beim 'top-step' mit breakcond oder beim abarbeiten einer Unterroutine mit dem
Befehl, ein vorher gesetzter user-definierter Breakpoint erreicht, erscheint die folgende Meldung:
Software breakpoint encountered...
continue (y/n) ?
Dr}cken sie
um den Breakpoint zu ignorieren oder irgendeine andere Taste um den Breakpoint zu best{tigen und damit die Anweisung nicht abzuarbeiten.
wird der GEOS Bildschirm nicht angezeigt, bis Option 5 aktiviert wird.
Beispiele:
@t.10
'top-step' durch 10 Anweisungen/Unterroutineaufrufen
t=f.c
'top-step' bis das Carry-Flag gesetzt ist
t=u.1(r.x>=$10)
benutze den Wert im Userregister 1 (
) und 'top-step' bis das X-Register gr|~er als oder gleich
10 ist.
Befehl:
Mini: siehe
im Kapitel 9
Zweck: abarbeiten bis der Breakpoint erreicht ist
Anwendung:
Pbreakcond
Hinweis:
Pbreakcond
ist eine optionale Breakpointbedingung.
Befehl beginnt mit der Abarbeitung von Code, mit der Speicherstelle, auf die der Programmz{hler zeigt und arbeitet ihn in normaler Geschwindigkeit ab, bis der Breakpoint erreicht ist. Wenn ein Breakpoint ausgel|st wird, wird die Kontrolle an den SuperDebugger }bergeben; wurde kein
Pbreakcond
festgelegt, wird die Anweisung am aktuellen Programmz{hler ausgegeben und die Kontrolle an das Bereitschaftszeichen zur}ckgegeben. Wurde ein
Pbreakcond
festgelegt, wird der Ausdruck getestet und der Z{hler herabgez{hlt. Erreicht der Z{hler null und die Bedingung ist wahr, wird der Breakpoint ausgel|st. Andernfalls wird die Anweisung beim Breakpoint abgearbeitet und der
Befehl arbeitet weiter ab, bis zum n{chsten Breakpoint.
Befehl zeigt den GEOS Bildschirm nicht an, es sei denn die Option 5 ist aktiviert.
Die Anwendung mit einer Bedingung erlaubt ihnen einen Breakpoint an den Beginn einer Routine zu setzen und die Auswertung von Bedingungen abh{ngig zu machen. Auf diese Weise k|nnen sie nur abbrechen, wenn bestimmte Bedingungen vorliegen.
Beispiele:
@p.10
arbeite ab, bis der Breakpoint zehnmal aufgerufen wurde
@p=f.d
arbeite ab, bis ein Breakpoint aufgerufen wird und das Dezimalmodusflag gesetzt ist
@p.8,=(@error_flg > disk_err)
arbeite ab, bis ein Breakpoint aufgerufen wird. Wenn die Variable
@error_flag
gr|~er ist als
@disk_err,
achtmal, dann breche ab.
Befehl:
@next
Synonym:
Mini: siehe
im Kapitel 9
Zweck: Breakpoint bei der n{chsten Anweisung setzen (physisch im Speicher) und arbeite mit der aktuellen
Anweisung
Anwendung:
@next
Hinweis: keine Parameter
@next
Befehl setzt einen Breakpoint an der n{chsten Anweisung im Speicher (die Anweisung die als n{chste zum Abarbeiten ansteht) und arbeitet die aktuelle Anweisung ab. Dieser Befehl ist sehr n}tzlich um eine Schleife zu verlassen. Die meisten Schleifen bestehen aus mehreren Anweisungen, gefolgt von einem R}cksprung. Benutzen sie den
@next
Befehl wenn der Programmz{hler auf die Branchanweisung zeigt, so wird ein Breakpoint bei der Anweisung nach dem Branch gesetzt und dann beginnt die Abarbeitung mit der Branchanweisung. Solange der Branch arbeitet und zur}ckspringt, wird die Abarbeitung fortgesetzt. Ist ein Branch fehlerhaft, wird der Breakpoint ausgel|st und die Kontrolle an das Bereitschaftszeichen zur}ckgegeben.
@Wichtig:
Sie k|nnen den
@next
Befehl nicht im ROM benutzen. Tun sie dies trotzdem, erhalten sie eine Fehlermeldung, da im ROM keine Breakpoints gesetzt werden k|nnen.
@next
Befehl zeigt den GEOS Bildschirm nur wenn sie option 5 aktiviert haben.
Beispiel: Vorgegeben ist folgende Schleife:
3000 Start ldx #$FF
3002 OutrLoop ldy #$FF
3004 InnrLoop dey
3005 InnrLoop+$01 bne InnrLoop
3007 InnrLoop+$03 dex
3008 InnrLoop+$04> bne OutrLoop
300A InnrLoop+$06 lda #$00
der Programmz{hler steht am r}ckw{rtsweisenden Branch bei
@$3008
, benutzen sie jetzt den
@next
Befehle so wird bei
@$300A
ein Breakpoint gesetzt und die Branch-Anweisung abgearbeitet. Ist das X-Register auf
@$00
herabgez{hlt, wird kein Sprung mehr ausgef}hrt und der Breakpoint wird ausgel|st.
Befehl:
@loop
Synonym:
Zweck: arbeitet mit der aktuellen Anweisung und setzt einen Breakpoint an der vorangehenden Anweisung
Anwendung:
@go (
Pbreakcond
Hinweis:
Pbreakcond
ist eine optionale Breakpointbedingung.
@loop
Befehl setzt einen Breakpoint an der aktuellen Anweisung im Speicher und arbeitet dann mit der aktuellen Anweisung weiter. Der Breakpoint wird gesetzt bevor die aktuelle Anweisung nochmals aufgerufen wird. Die Idee die diesem Befehl zugrunde liegt, ist eine Schleife abzuarbeiten, indem der Prozessor wartet bis er zur aktiven Anweisung zur}ckkehrt. Wird
@loop
ohne breakcond benutzt, wird die Schleife einmal abgearbeitet.
@loop
Befehl kann auch mit einem breakcond versehen werden. Bei jedem Schleifendurchgang (jedesmal wenn der Breakpoint aufgerufen wird), wird die Bedingung ausgewertet und der Z{hler herabgez{hlt. Wird die Bedingung mit wahr ausgewertet und damit der Z{hler null, so wird der Breakpoint ausgel|st.
@Wichtig:
Sie k|nnen den
@loop
Befehl nicht im ROM benutzen. Tun sie dies trotzdem, erhalten sie eine Fehlermeldung, da im ROM keine Breakpoints gesetzt werden k|nnen.
@loop
Befehl zeigt den GEOS Bildschirm nicht an (es sei denn option 5 ist aktiviert).
Beispiel:
Vorgegeben ist folgende Schleife:
3000 Start ldx #$FF
3002 OutrLoop ldy #$FF
3004 InnrLoop > dey
3005 InnrLoop+$01 bne InnrLoop
3007 InnrLoop+$03 dex
3008 InnrLoop+$04 bne OutrLoop
300A InnrLoop+$06 lda #$00
zeigt der Programmz{hler auf
@dey
@$3004
in der Mitte der Schleife, benutzen sie jetzt den
@loop
Befehl, so wird bei
@$3004
ein Breakpoint gesetzt und die Anweisung abgearbeitet. Angenommen der Stand des X und Y-Registers sind nicht so, da~ die Schleife verlassen wird, dann wird der Breakpoint im n{chsten Durchgang ausgel|st.
@Hinweis
: Der
@loop
Befeh l basiert auf der Abarbeitung; sie erhalten falsche Resultate, wenn die Schleife benutzerdefinierte Breakpoints enth{lt, da breakcond bei jedem Breakpoint ausgewertet wird und nicht erst am aktuellen Standort.
Befehl:
@skip
Zweck: die aktuellen Anweisungen }berspringen ohne sie abzuarbeiten
Anwendung:
@skip
Hinweis: keine Parameter
@skip
Befehl erh|ht den Programmz{hler, der dann auf die n{chste Anweisung im Speicher zeigt, dadurch wird die aktuelle Anweisung }bersprungen ohne da~ sie abgeabeitet wird. Der
@skip
Befehl ist bei Branch Anweisungen sehr n}tzlich, die ansonsten ausgel|st werden, oder bei
Anweisungen im Code.
Befehl:
@stopmain
Synonym:
Mini: siehe
im Kapitel 9
Zweck: Programm weiter abarbeiten bis zu einem sicheren Punkt in der GEOS-MainLoop, dann R}ckkehr in den
Super-Debugger
Anwendung:
@stopmain
Hinweis: keine Parameter
Wenn sie
@RESTORE
benutzen um in den Supper-Debugger zu kommen, ist es manchmal besser wenn sie den
@stopmain
Befehl benutzen, besonders dann wenn sich der Prozessor im Interrupt Code befindert.
@stopmain
plaziert einen sicheren Breakpoint in der GEOS MainLoop und veranla~t ein go. Zusammenfassend hei~t das, die Applikation }bergibt die Kontrolle sofort an MainLoop, der Breakpoint wird aufgerufen und die Kontrolle an den Debugger }bergeben.
Mehr Informationen }ber die GEOS
@MainLoop
finden sie im '
POfficial GEOS Programmer's Reference Guide
@Wichtig
: Wenn sie einen Abbruch in den Debugger mit
@RESTORE
ausl|sen, w{hrend Interrupt Code abgearbeitet wird und sie setzen
@stopmain
nicht ein, kann ein nachfolgender
@getb
oder
@putb
die Diskette zerst|ren.
HStackbezogene Befehle
Befehl:
@stack
Zweck: zeigt die oberen acht Bytes des Stack an
Anwendung:
@stack
Hinweis: keine Parameter
Der Befehl Stack zeigt die oberen acht Bytes des Stack (in der Page 1) im folgenden Format an:
aktueller Stack:
addr byteword return address
$01EA $FF $04FF $0500
$01EB $04 $3004 SetLoop
$01EC $30 $0630 $0631
$01ED $06 $6506 $6507
$01EE $65 $7A65 Do_quit
$01EF $7A $EE7A ClrMenu
$01F0 $EE $43EE $43EF
$01F1 $43 $0743 $0744
@stack
startet am aktuellen Stackzeiger (
@sp, r.sp
) und liest schrittweise acht Bytes vom Stack. Das
@addr
Feld zeigt hexadezimal den Standort im Stackbereich der Page eins. Das
@byte
Feld zeigt den Bytewert an diesem Standort; dies ist das Byte das bei einer
@pla
Anweisung in den Akku geladen w}rde. Das
@word
Feld zeigt den Wordwert an dieser Stelle (Lo/Hi). Das
@'return address'
Feld
zeigt die
Adresse mit der nach einem
@rts
die Abarbeitung wieder aufgenommen w}rde oder ein
@return
Befehl abgearbeitet worden w{re; es ist der Wordwert plus eins, der Super-Debugger versucht ihn als Symbol darzustellen.
Siehe auch:
@return
Befehl:
@history
Synonym:
Zweck: zeigt den 'step-through-jsr' Stack an
Anwendung:
@history
Hinweis: keine Parameter
Jedesmal wenn der
Einzelschritt Befehl benutzt wird um sich durch einen Unterroutinenaufruf (
) zu bewegen, wird die Adresse der Routine, die gerade abgearbeitet wurde, auf den Super-Debugger 'step-through-jsr' Stack geschoben. Der
@history
Befehl zeigt diesen Stack. Dies gibt ihnen einen ]berblick }ber den Weg durchs Programm bis zum aktuellen Punkt.
Der 'step-through-jsr' Stack wird in Verbindung mit dem Befehl
@finish
benutzt. Weitere Informationen finden sie bei
@finish.
Beispiel:
Nachdem
@jsr Graphics
bei
@$40C
und
@jsr $CA69
bei
@$C94C
abgearbeitet wurde, ergibt die Eingabe von history folgende Anzeige:
step through jsr history:
040C ProgStar+$0C jsr Graphics
C94C $C94C jsr $CA69
Siehe auch:
@finish, s
@ inithist.
Befehl:
@inithist
Abkzg:
@inith
Zweck: l|scht die 'step-through-jsr history'
Anwendung:
@inithist
Hinweis: keine Paramter
@inithist
Befehl l|scht die ganze 'step-through-jsr history'. Der history Stack wird jedesmal automatisch gel|scht, wenn folgende Befehle (oder irgendein Makro, da~ auf diesen Befehlen basiert) verwendet werden,
@go, p, runto
@ return.
Der history Stack wird auch gel|scht, wenn ein
@brk
Anweisung ausgel|st wird.
Befehl:
@finish
Abkzg:
Zweck: zu Ende abarbeiten (in normaler Geschwindigkeit) die zuletzt im Einzelschrittmodus bearbeiteten
Unterroutine. Benutzt den 'step-through-jsr' Stack.
Anwendung:
@finish
Hinweis: keine Parameter
Jedesmal wenn der
Einzelschritt Befehl benutzt wird um sich durch einen Unterroutinenaufruf zu arbeiten (
), wird die Adresse der Routine die gerade abgearbeitet wurde auf den SuperDebugger 'step-through-jsr' Stack geschoben. Der
@finish
Befehl beendet ('finishes') die Unterroutine mit deren Bearbeitung zuletzt im Einzelschrittmodus begonnen wurde, 'poppt' dabei das neueste Element auf den 'step-through-jsr' Stack.
@finish
Befehl arbeitet, indem er den 'step-through-jsr' Stack }berpr}ft und Breakpoints bei der Anweisung setzt, die die letzte jsr Anweisung setzt.
@finish
ist sehr n}tzlich wenn sie versehentlich ein jsr in Einzelschritten abarbeiten und sie glaubten sie seinen im 'top-step', oder wenn sie eine Unterroutine }berpr}fen und sie stellen fest, da~ es nicht die richtige ist und sie wollen zum vorherigen Level zur}ckkehren.
@Wichtig:
Sie k|nnen
@finish
nicht benutzen, wenn sie versucht haben einen Breakpoint im
@ROM
zu setzen; sie erhalten dann eine Fehlermeldung, da im ROM keine Breakpoints gesetzt werden k|nnen. Ebenso sollte finish nicht benutzt werden, um einen GEOS Inline Unterroutinenaufruf zu beenden (GEOS Routinen die mit
beginnen).
@finish
setzt das erste Byte der Inlinedaten auf
und der Breakpoint wird nie aufgerufen.
@Hinweis:
Wenn ein Software Breakpoint w{hrend 'top-step' aufgerufen wird und sie w{hlen nicht das Fortsetzen der Anwendungen, wird der 'top-step' Punkt des Eintritts auf den history Stack geschoben. Ein folgender
@finish
Befehl setzt den 'top-step' fort, indem er die Anweisung nach dem 'top-stepped'
@jsr
zur}ckholt.
@finish
Befehl zeigt den GEOS Bildschirm nicht an (es sei denn option 5 ist aktiviert).
Beispiel:
Ausgegeben wird folgende 'step-through-jsr history' (angezeigt mit Hilfe des Befehls
@history
step through jsr history:
040C ProgStar+$0C jsr Graphics
C94C $C94C jsr $CA69
Der Programmz{hler zeigt in die Unteroutine bei
@$CA69
@finish
bearbeitet die Anweisung zu Ende und folgt dabei der
@$CA69
Anweisung. Ein weiterer
@finish
Befehl bearbeitet die Anweisung zu Ende und folgt dabei der
@jsr Graphics
Anweisung.
Siehe auch:
@history, inithist, s
@ return
Befehl:
@return
Zweck: 'run' bis Unterroutine zur}ckkehrt
Anwendung:
@return
Hinweis: keine Parameter
@return
@ finish
Befehl sind in einem Punkt gleich, sie veranlassen, da~ in normaler Geschwindigkeit abgearbeitet wird bis die Unterroutine zu Ende ist. Dann nimmt der
@return
Befehl die R}ckadresse vom Stack.
@return
setzt einen Breakpoint an der Adresse die bei einem
@rts
verwendet wird. Er unterstellt, da~ das oberste Word (zwei Bytes) die g}ltige Adresse darstellt. Hat die Unterroutine Werte auf den Stack geschoben, arbeitet
@return
nicht richtig.
@Wichtig
: Sie k|nnen den
@return
Befehl nicht verwenden wenn er bewirkt, da~ im ROM ein Breakpoint gesetzt wird; sie erhalten eine Fehlermeldung, da im ROM kein Breakpoint gesetzt werden kann. Ebenso sollte der
@return
Befehl nicht benutzt werden, um einen GEOS Inline Unterroutinenaufruf zu beenden (GEOS Routinen die mit